/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionform;

import dao.exception.DAOConnectionException;
import dao.exception.DAOCoursException;
import dao.exception.DAOEtudiantException;
import dao.exception.DAOExamenException;
import dao.exception.DAOException;
import dao.interfaces.DAOCours;
import static gestionform.GestionInfos.getValeurChamp;
import gestionform.exception.ValidationCreateException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import model.Cour;
import model.Enseignant;
import model.Personne;

/**
 *
 * @author Paul
 */
public class GestionCours extends GestionInfos {

    public static final String SELECT_NOM_COURS = "nomcours";
    public static final String CHAMP_INTITULE = "nomexamen";
    public static final String INTITULE_COURS = "intituleCours";
    public static final String COEFF = "coeff";
    private DAOCours daoCours;

    public GestionCours(DAOCours daoCrs) {
        this.daoCours = daoCrs;
    }

    public ArrayList<Cour> getListeCoursEnseignant(Integer id) {
        ArrayList<Cour> listeCours = new ArrayList<Cour>();
        try {
            listeCours = daoCours.findCoursProf(id);
        } catch (DAOCoursException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return listeCours;
    }

    public ArrayList<Cour> getListeCoursEtudiant(Integer id) {
        ArrayList<Cour> listeCours = new ArrayList<Cour>();
        try {
            listeCours = daoCours.findCoursEtudiant(id);
        } catch (DAOCoursException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return listeCours;
    }

    public ArrayList<Cour> getListeCoursCoeffEtudiant(Integer id) {
        ArrayList<Cour> listeCours = new ArrayList<Cour>();
        try {
            listeCours = daoCours.findCoursCoeff(id);
        } catch (DAOCoursException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return listeCours;
    }

    public void attribuerCours(String etudiantSelected, String coursSelected) {
        try {
            daoCours.attributeEudiant(Integer.parseInt(etudiantSelected), Integer.parseInt(coursSelected));
            resultat = "Insertion réussie.";
        } catch (DAOCoursException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
    }

    public void attribuerCours(int idEnseignant, String coursSelected) {
        try {
            daoCours.attributeProfesseur(idEnseignant, Integer.parseInt(coursSelected));
            resultat = "Insertion réussie.";
        } catch (DAOCoursException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
    }

    public ArrayList<Enseignant> getProf(int idCour) {
        ArrayList<Enseignant> listeEns = new ArrayList<Enseignant>();
        try {
            listeEns = daoCours.rechercheProf(idCour);
        } catch (DAOCoursException daoEnsEx) {
            resultat = daoEnsEx.getMessage();
        } catch (DAOConnectionException daocEx) {
            resultat = daocEx.getMessage();
        }
        return listeEns;
    }

    public void createCours(HttpServletRequest request, Integer id) {
        String nomCours = getValeurChamp(request, INTITULE_COURS);
        String coeff = getValeurChamp(request, COEFF);
        try {
            traiterCoeff(coeff);
            traiterNomCours(nomCours);
            if (erreurs.isEmpty()) {
                try {
                    int idCours = daoCours.create(nomCours, Float.parseFloat(coeff));
                    daoCours.attributeProfesseur(id, idCours);
                    resultat = "Le cours a bien été crée";
                } catch (DAOCoursException daoEx) {
                    resultat = daoEx.getMessage();
                } catch (DAOConnectionException daocEx) {
                    resultat = daocEx.getMessage();
                }
            }
        } catch (DAOException daoEx) {
            setErreur("", "Échec de la connexion : une erreur imprévue est survenue, merci de réessayer ultérieurement.");
            daoEx.printStackTrace();
        }
    }

    public void deleteCours(HttpServletRequest request, Integer id) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private void traiterCoeff(String coeff) {
        try {
            validerCoeff(coeff);
        } catch (ValidationCreateException e) {
            setErreur(COEFF, e.getMessage());
        }
    }

    private void validerCoeff(String coeff) throws ValidationCreateException {
        if (coeff != null) {
            try {
                float coefficient = Float.parseFloat(coeff);
                if (coefficient < 0) {
                    throw new ValidationCreateException("Veuillez saisir un coefficient positif.");
                }
            } catch (NumberFormatException ex) {
                throw new ValidationCreateException("Veuillez saisir un entier pour le coefficient.");
            }
        } else {
            throw new ValidationCreateException("Veuillez saisir un coefficient.");
        }
    }

    private void traiterNomCours(String nomCours) {
        try {
            validerNomCours(nomCours);
        } catch (ValidationCreateException e) {
            setErreur(INTITULE_COURS, e.getMessage());
        }
    }

    private void validerNomCours(String nomCours) throws ValidationCreateException {
        if (nomCours != null) {
            if (nomCours.matches("[0-9]+")) {
                throw new ValidationCreateException("Veuillez saisir des caractères pour le cours.");
            }
        } else {
            throw new ValidationCreateException("Veuillez saisir un nom de cours.");
        }
    }
}
